/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package asja.formulario;


import asja.bd.Conexao;
import asja.dao.FuncionarioDao;
import asja.excecoes.ValorInvalido;
import asja.modelo.FuncionarioModelo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.*;
import java.util.List;

/**
 *
 * @author Alice
 */
public class VisualizaFuncionarioFormulario extends JFrame{ 
       
      public JTable tabela;
      private JPanel painel_tabela;
      public DefaultTableModel modelo, modelo_nome; // depois instanciar
      private Connection conecta;
      private JScrollPane js_tabela;
      private JLabel jlbl_img;
      private JButton bt_imprimir,bt_cancelar, bt_pesquisar, bt_eliminar, bt_editar;
      private JTextField jtf_pesquisar, jtf_rg;
      List <FuncionarioModelo> nomes;
      CadastroFuncionarioFormulario form= new CadastroFuncionarioFormulario();
      
      
      
    public VisualizaFuncionarioFormulario()throws SQLException {
        
        
        this.conecta = Conexao.getConnection();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setTitle("Visualizar Funcionário");  
        this.setSize(700, 500);          
        this.setLocationRelativeTo(null);  
    } 
    
    public void criaJanela(){     
        
        
       // String espaco= new String(" ");
        modelo = new DefaultTableModel(); 
        tabela= new JTable(modelo);
        jlbl_img= new JLabel();
        bt_imprimir= new JButton("Imprimir");
        bt_pesquisar= new JButton("Pesquisar");
        bt_cancelar= new JButton("Menu");
        bt_eliminar= new JButton("Eliminar");
        bt_editar= new JButton("Editar");
        js_tabela= new JScrollPane(tabela);
        jtf_pesquisar= new JTextField("", 50);
        jtf_rg= new JTextField("", 20);
       
        this.cria_tabela();   
     
         //Painel cabecalho
       JPanel painel_cabecalho = new JPanel();         
       painel_cabecalho.setLayout(new BorderLayout());            
       jlbl_img.setIcon(new ImageIcon("imagens\\visualiza.jpg"));
       painel_cabecalho.add(jlbl_img, BorderLayout.CENTER); 
       
       //Painel pesquisa
       JPanel painel_pesquisa = new JPanel();
       painel_pesquisa.setLayout(new FlowLayout());
       painel_pesquisa.add(jtf_pesquisar);
       painel_pesquisa.add(bt_pesquisar);
       painel_pesquisa.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Pesquisa"));
       
       
    
       //Painel tabela
       painel_tabela = new JPanel();
       painel_tabela.setLayout(new BorderLayout());
       painel_tabela.add(painel_pesquisa, BorderLayout.NORTH);
       painel_tabela.add(js_tabela, BorderLayout.CENTER);
       
    
       
       //painel para os comandos
       JPanel painel_comandos = new JPanel();         
       painel_comandos.setLayout(new FlowLayout()); 
       painel_comandos.add(bt_imprimir);
       painel_comandos.add(bt_editar);
       painel_comandos.add(bt_eliminar);
       painel_comandos.add(bt_cancelar);
       

        //criando o painel principal e adicionando ao JFrame
        JPanel painel_geral = new JPanel();
        painel_geral.setLayout(new BorderLayout());
        painel_geral.add(painel_cabecalho, BorderLayout.NORTH);
        
        painel_geral.add(painel_tabela, BorderLayout.CENTER);
        painel_geral.add(painel_comandos, BorderLayout.SOUTH);
        this.getContentPane().add(painel_geral);  
        
        bt_cancelar.addMouseListener(new MouseAdapter() {
        @Override
            public void mouseClicked(MouseEvent evt){
                dispose();
                MenuPrincipalFormulario mnu_principal = new MenuPrincipalFormulario(); 
                mnu_principal.criajanela_menuprincipal();  
                mnu_principal.aparencia_MenuPrincipal();
                
                                 
            }});
        
        bt_pesquisar.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent evt){
                try {
                    
                        compara_nome();
                    
                } catch (SQLException ex) {
                    Logger.getLogger(VisualizaFuncionarioFormulario.class.getName()).log(Level.SEVERE, null, ex);
                } catch (ValorInvalido ex) {
                    Logger.getLogger(VisualizaFuncionarioFormulario.class.getName()).log(Level.SEVERE, null, ex);
                }catch (IOException ex) {
                        JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Funcionário não existe", "Pesquisar Funcionario", JOptionPane.WARNING_MESSAGE);
                    }
                                 
            }});
      
        bt_eliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {                   
                        remove_funcionario();
                        JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Funcionário Removido com Sucesso!", "Eliminar Funcionario", JOptionPane.INFORMATION_MESSAGE);
                        
                } catch (SQLException ex) {
                    JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Impossível Eliminar", "Eliminar Funcionario", JOptionPane.WARNING_MESSAGE);
                }catch (IOException ex) {
                       JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Selecione o Funcionário que deseja eliminar", "Eliminar Funcionario", JOptionPane.WARNING_MESSAGE);
                }
            }
        });
        
        bt_editar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
                     setar_valores ();                     
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Selecione o Funcionário que deseja Editar", "Eliminar Funcionario", JOptionPane.WARNING_MESSAGE);
                }
            }
        });
  

        //pack();        
        this.setVisible(true);
        this.setResizable(false);  
   
    } 
    
    public void cria_tabela(){
        
        js_tabela.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
        tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        js_tabela.setHorizontalScrollBar(new JScrollBar(0));
        
        
         //adicionando colunas a tabela
         modelo.addColumn("Nome Completo ");
         modelo.addColumn("RG");
         modelo.addColumn("CPF");
         modelo.addColumn("Data de Nascimento");
         modelo.addColumn("Estado Civil");
         modelo.addColumn("Sexo");
         modelo.addColumn("Estado");
         modelo.addColumn("Cidade");
         modelo.addColumn("Bairro");
         modelo.addColumn("Endereço");
         modelo.addColumn("Complemento");
         modelo.addColumn("CEP");
         modelo.addColumn("Cargo");
         modelo.addColumn("Telefone");
         modelo.addColumn("Email");
         modelo.addColumn("Ano de Cadastro"); 
         
                
         //redimensionando as colunas
         tabela.getColumnModel().getColumn(0).setPreferredWidth(200);
         tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(2).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(3).setPreferredWidth(120);
         tabela.getColumnModel().getColumn(4).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(5).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(6).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(7).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(8).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(9).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(10).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(11).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(12).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(13).setPreferredWidth(100);
         tabela.getColumnModel().getColumn(14).setPreferredWidth(200);
         tabela.getColumnModel().getColumn(15).setPreferredWidth(100);
       
    }
  public void visualizaFuncionario () throws SQLException
   {
		
		ResultSet rs;            
                
                PreparedStatement stmt = this.conecta.prepareStatement ("select * from funcionario order by nome");
		rs = (ResultSet) stmt.executeQuery();	

               while (rs.next()){
                  modelo.addRow(new String []{rs.getString("nome"),rs.getString("rg"), rs.getString("cpf"), rs.getString("dia_nascimento") + "/" + rs.getString("mes_nascimento") + "/" + rs.getString("ano_nascimento"), rs.getString("estado_civil"),rs.getString("sexo") , rs.getString("estado"), rs.getString("cidade"), rs.getString("bairro"), rs.getString("endereco"),rs.getString("complemento"), rs.getString("cep"),rs.getString("cargo"), rs.getString("telefone"), rs.getString("email"), rs.getString("dia_cadastro") + "/" + rs.getString("mes_cadastro") + "/" + rs.getString("ano_cadastro") });
		}
		stmt.close();
		conecta.close();
	}      
    
    public int pesquisa() throws SQLException, ValorInvalido{
        
       conecta = Conexao.getConnection();
       PreparedStatement stmt = conecta.prepareStatement("select * from funcionario where nome like ? or rg like? or cpf like?");                   
       stmt.setString(1, jtf_pesquisar.getText());// consulta por nome
       stmt.setString(2, jtf_pesquisar.getText());// consulta por rg
       stmt.setString(3, jtf_pesquisar.getText());// consulta por cpf
      
       ResultSet rs = stmt.executeQuery(); //Para consultas, retorna um objeto ResultSet    
      int i =0;// variável auxiliar que vai armazenar quantos registros resultam de uma determinada consulta
       
       while(modelo.getRowCount()>0){
         modelo.removeRow(0);
       }
       
      while (rs.next()) {
               modelo.addRow(new String []{rs.getString("nome"),rs.getString("rg"), rs.getString("cpf"), rs.getString("dia_nascimento") + "/" + rs.getString("mes_nascimento") + "/" + rs.getString("ano_nascimento"), rs.getString("estado_civil"),rs.getString("sexo") , rs.getString("estado"), rs.getString("cidade"), rs.getString("bairro"), rs.getString("endereco"),rs.getString("complemento"), rs.getString("cep"),rs.getString("cargo"), rs.getString("telefone"), rs.getString("email"), rs.getString("dia_cadastro") + "/" + rs.getString("mes_cadastro") + "/" + rs.getString("ano_cadastro") });
               i++;
        } 
        stmt.close();
        conecta.close();
       return i;
   
    }

    public void compara_nome()throws SQLException, ValorInvalido, IOException{ 
         
        int i=pesquisa();
       if(i==0)
           throw new IOException("Funcionário não existente");
        else
          pesquisa();
   }
    
  // Método para saber se uma linha da tabela foi selecionada
    public String tabela_clicada() throws IOException {
        
        java.awt.event.MouseEvent evt; 
        String rg;
        
        
        int linha_selecionada= tabela.getSelectedRow();// pegar a linha selecionada
        if(linha_selecionada<0)
           throw new IOException("Funcionário não selecionado");
        else{
            jtf_rg.setText(tabela.getValueAt(linha_selecionada, 1).toString());
            rg= jtf_rg.getText();      
            modelo.removeRow(linha_selecionada);
            return rg;
        } 
    
 }
    
   public void remove_funcionario()throws SQLException, IOException{
       
       String rg=tabela_clicada();
       conecta = Conexao.getConnection();
       PreparedStatement stmt = conecta.prepareStatement("delete from funcionario where rg like?"); 
       stmt.setString(1, rg);
       stmt.execute();
       stmt.close();
    
  }
   
 // Método para tirar os valores do banco de dados e colocar no formulário cadastro
    public void setar_valores () throws IOException {
        
        
        String auxiliar;
        int linha_selecionada= tabela.getSelectedRow();// pegar a linha selecionada
        if(linha_selecionada<0)
           throw new IOException("Funcionário não selecionado");
        else{
            
           
                        
            form.criajanela_cadastro();            
            form.jtf_nome.setText(tabela.getValueAt(linha_selecionada, 0).toString());
            form.jtf_rg.setText(tabela.getValueAt(linha_selecionada, 1).toString());
            form.jtf_cpf.setText(tabela.getValueAt(linha_selecionada, 2).toString());
            form.jtf_cidade.setText(tabela.getValueAt(linha_selecionada, 7).toString());
            form.jtf_bairro.setText(tabela.getValueAt(linha_selecionada, 8).toString());
            form.jtf_endereco.setText(tabela.getValueAt(linha_selecionada, 9).toString());
            form.jtf_complemento.setText(tabela.getValueAt(linha_selecionada, 10).toString());
            form.jtf_cep.setText(tabela.getValueAt(linha_selecionada, 11).toString());
            form.jtf_cargo.setText(tabela.getValueAt(linha_selecionada, 12).toString());
            form.jtf_telefone.setText(tabela.getValueAt(linha_selecionada, 13).toString());
            form.jtf_email.setText(tabela.getValueAt(linha_selecionada, 14).toString());
                  
           form.bt_ok.setVisible(false);
           form.bt_ok1.setVisible(true);
           
           form.bt_ok1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                    try {
                        reegravar();
                        JOptionPane.showMessageDialog(null, "Gravado com sucesso!!!");
                        dispose();
                    } catch (ValorInvalido ex) {
                       JOptionPane.showMessageDialog(VisualizaFuncionarioFormulario.this, "Nome Inválido", "Cadastro", JOptionPane.WARNING_MESSAGE);
                    } catch (SQLException ex) {
                        Logger.getLogger(VisualizaFuncionarioFormulario.class.getName()).log(Level.SEVERE, null, ex);
                    }
        }});
            
        }}
       
      public void reegravar() throws ValorInvalido, SQLException{
          FuncionarioModelo insere = new FuncionarioModelo();
          insere.setNome(form.jtf_nome.getText()); 
          insere.setRg(form.jtf_rg.getText()); 
          insere.setCpf(form.jtf_cpf.getText()); 
          insere.setCidade(form.jtf_cidade.getText()); 
          insere.setBairro(form.jtf_bairro.getText()); 
          insere.setEndereco(form.jtf_endereco.getText()); 
          if (form.jtf_telefone.getText().toString().equals(""))
               throw new ValorInvalido(" Telefone Inválido!"); 
          
          insere.setTelefone(Double.parseDouble(form.jtf_telefone.getText())); 
          insere.setEmail(form.jtf_email.getText()); 
          insere.setCargo(form.jtf_cargo.getText()); 
          insere.setCep(form.jtf_cep.getText()); 
          insere.setComplemento(form.jtf_complemento.getText()); 
          FuncionarioDao contr = new FuncionarioDao();
         // System.out.println("depois do add "+insere.getNome()); 
           contr.editar_cadastro(insere);
          
      }
    

      
   public static void main(String [] args){
          
          VisualizaFuncionarioFormulario mnu_visualiza; 
        try {
            mnu_visualiza = new VisualizaFuncionarioFormulario();
            mnu_visualiza.criaJanela();
            mnu_visualiza.visualizaFuncionario();
        } catch (SQLException ex) {
            Logger.getLogger(VisualizaFuncionarioFormulario.class.getName()).log(Level.SEVERE, null, ex);
        }
          
   }

    
}
